// 路由鉴权
import router from "./router";
// 引入进度条插件与样式
import nprogress from "nprogress";
import "nprogress/nprogress.css";
nprogress.configure({ showSpinner: false });

import setting from "./setting";

// 引入仓库
import pinia from "./store";
import useUserStore from "./store/modules/user";
let userStore = useUserStore(pinia); //在组件外部使用小仓库，需要传入大仓库

// 全局路由前置守卫
router.beforeEach(async (to, from, next) => {
  document.title = `${setting.title}-${to.meta.title}`;
  nprogress.start();
  let token = userStore.token;
  let username = userStore.username;
  if (token) {
    // 登录成功
    if (to.path == "/login") {
      next({ path: "/" });
    } else {
      if (username) {
        // 有用户信息
        next();
      } else {
        // 没有用户信息 -- 先去获取用户信息
        try {
          await userStore.getUserInfo();
          next();
        } catch (error) {
          // token过期 | token被手动修改
          // 退出登录
          userStore.signOut();
          next({ path: "/login", query: { redirect: to.path } });
        }
      }
    }
  } else {
    // 未登录
    if (to.path == "/login") {
      next();
    } else {
      next({ path: "/login", query: { redirect: to.path } });
    }
  }

  next();
});

// 全局后置守卫
router.afterEach((to, from) => {
  nprogress.done();
});

/**
 * 1、用户未登录：只能访问登录页面，访问其他页面指向登录页面
 * 2、用户登录成功：不可以访问登录页面(login)，访问login时指向首页，可以访问其余页面
 */
